// 声明一个对象
const classAndGrade = {
  name: "终极一班",
  students: [
    "Mr.chen",
    "Mr.xiao",
    "Mr.wu",
    "Mr.wang",
    "Mr.kang",
    "Mr.cao",
    "Mr.peng",
    "Mr.jiang",
  ],

  [Symbol.iterator]() {
    // 声明索引变量
    let index = 0;
    let isDone = false;
    // return {}; // 缺少next方法
    return {
      // 箭头函数的作用是为了确保this指向为classAndGrade
      next: () => {
        // return {}
        // 需要返回两个属性值 一个value代表返回数据 一个done代表是否遍历完成
        if (index == this.students.length) {
          // 当index等于数组长度-1 代表遍历完成 但是我们别忘了需要返回一次undefind的值去表示已完成状态
          isDone = true;
          // console.log(this);
        }
        return { value: this.students[index++], done: isDone }
      }
    }
  }
}

// 遍历对象 for...in
// for (let key in classAndGrade) {
//   console.log(key);
// }

// 遍历对象 for...of
for (let value of classAndGrade) {
  console.log(value);
}
// TypeError: classAndGrade is not iterable
// !!!可以看到 上面的代码报错了 说这个对象不可遍历 其实就是没有找到Symbol.itertor这个方法 这时候我们可以在classAndGrade中添加一个这样的方法